package models;

import java.io.File;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Set;

import javax.persistence.CascadeType;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.OneToMany;

import org.hibernate.annotations.Fetch;
import org.hibernate.annotations.FetchMode;
import org.hibernate.annotations.FetchProfile;
import org.hibernate.annotations.FetchProfile.FetchOverride;

import play.db.jpa.Blob;

@Entity
public class Enseignant extends User {

	/**
	 * Liste intervention de l'enseignant
	 */
	@OneToMany(mappedBy = "enseignantIntervention", cascade = CascadeType.ALL, fetch = FetchType.EAGER)
	public Set<Intervention> listInterventionEnseignant;

	/**
	 * Constructeur enseignant
	 * 
	 * @param lastNameUser
	 * @param firstNameUser
	 * @param emailUser
	 * @param passwordUser
	 * @param avatarPathUser
	 */
	public Enseignant(String lastNameUser, String firstNameUser,
			String emailUser, String passwordUser, Blob avatarPathUser) {
		super(lastNameUser, firstNameUser, emailUser, passwordUser);
		this.listInterventionEnseignant = new HashSet<Intervention>();
	}

	/**
	 * Constructeur à partir d'un user existant
	 * @param userToCopy
	 */
	public Enseignant(User userToCopy, Set<Intervention> listIntervention) {
		this(userToCopy.lastNameUser, userToCopy.firstNameUser,
				userToCopy.emailUser, userToCopy.passwordUser,
				userToCopy.avatarPathUser);
		this.id = userToCopy.id;
		this.listInterventionEnseignant = listIntervention;
	}

	/**
	 * Constructeur vide enseignant
	 */
	public Enseignant() {
		this(null, null, null, null, null);
	}

	/**
	 * Méthode permettant d'authentifier un enseignant
	 * 
	 * @param emailUser
	 * @param passwordUser
	 * @return l'enseignant récupéré de la base de donnée
	 */
	public static Enseignant connect(String emailUser, String passwordUser) {
		return find("byEmailUserAndPasswordUser", emailUser, passwordUser)
				.first();
	}

	/**
	 * Méthode permettant de créer un enseignant
	 * 
	 * @param enseignant
	 * @return l'enseignant créée dans la base de donnée
	 */
	public static Enseignant create(Enseignant enseignant) {
		return enseignant.create() ? enseignant : null;
	}	
}
